package com.zxy.lm;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.ArrayList;
import java.util.List;

public class CodeGenerator {
    public static void main(String[] args) {
        //代码生成器
        AutoGenerator autoGenerator = new AutoGenerator();

        //数据源配置
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setDbType(DbType.MYSQL);//指定数据库类型
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        // TODO: 2021-6-21 填写mysql用户名密码
        dataSourceConfig.setUsername("root");
        dataSourceConfig.setPassword("zhao123");
        // TODO: 2021-6-21 填写jdbc连接
        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/zxy-library?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useUnicode=true&useSSL=false");
        autoGenerator.setDataSource(dataSourceConfig);

        //全局配置
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setOpen(false);
        //开启文件覆盖
        globalConfig.setFileOverride(false);
        //设置控制层类名
        globalConfig.setControllerName("%sController");
        //设置service类名
        globalConfig.setServiceName("%sService");
        //设置serviceImpl类名
        globalConfig.setServiceImplName("%sServiceImpl");
        // mapper 命名方式
        globalConfig.setMapperName("%sMapper");
        // xml 命名方式
        globalConfig.setXmlName("%sMapper");
        //输出路径
        // TODO: 2021-6-21 填写删除路径
        globalConfig.setOutputDir("D:\\0_MySource\\Java\\myproject\\library-management\\src\\main\\java");
        // 是否开启 ActiveRecord 模式
        globalConfig.setActiveRecord(true);
        // 是否在xml中添加二级缓存配置
        globalConfig.setEnableCache(false);
        // 是否开启 BaseResultMap
        globalConfig.setBaseResultMap(false);
        // XML columList
        globalConfig.setBaseColumnList(false);
        //设置作者名字
        globalConfig.setAuthor("jiusi");
        //开启swagger2注解
        globalConfig.setSwagger2(true);
        autoGenerator.setGlobalConfig(globalConfig);

        //包配置
        PackageConfig packageConfig = new PackageConfig();
        // TODO: 2021-6-21 填写包名
        packageConfig.setParent("com.zxy.lm");//自定义包的路径
        packageConfig.setEntity("entity");
        packageConfig.setMapper("mapper");
        packageConfig.setController("controller");
        packageConfig.setService("service");
        packageConfig.setServiceImpl("service.impl");
        autoGenerator.setPackageInfo(packageConfig);

        //策略配置
        StrategyConfig strategyConfig = new StrategyConfig();
        //是否使用Lombok
        strategyConfig.setEntityLombokModel(true);
        //表前缀
        strategyConfig.setTablePrefix("t_");
        //乐观锁属性名称
//        strategyConfig.setVersionFieldName("version");
        //生成 @RestController 控制器
        strategyConfig.isRestControllerStyle();
        //逻辑删除属性名称
        strategyConfig.setLogicDeleteFieldName("delete_flag");
        // 是否生成实体时，生成字段注解
        strategyConfig.setEntityTableFieldAnnotationEnable(true);
        // 设置逻辑删除键
//        strategyConfig.setLogicDeleteFieldName("delete");
        // TODO: 2021-6-21 填写表名
//        strategyConfig.setInclude("t_admin,t_book,t_borrow_record,t_type,t_user".split(","));
        strategyConfig.setInclude("t_announcement".split(","));
        //包，列的命名规则，使用驼峰规则
        strategyConfig.setNaming(NamingStrategy.underline_to_camel);
        strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);

        //自动填充字段,在项目开发过程中,例如创建时间，修改时间,每次，都需要我们来指定，太麻烦了,设置为自动填充规则，就不需要我们赋值咯
        List<TableFill> list = new ArrayList<>();
        TableFill tableFill1 = new TableFill("create_time", FieldFill.INSERT);
        TableFill tableFill2 = new TableFill("update_time", FieldFill.INSERT_UPDATE);
        list.add(tableFill1);
        list.add(tableFill2);

        strategyConfig.setTableFillList(list);
        autoGenerator.setStrategy(strategyConfig);

        //执行
        autoGenerator.execute();

    }
}